package com.warningrc.util;

import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;

/**
 * 操作 {@code java.util.Set} 的一些静态方法
 * @author <a href="http://weibo.com/weibowarning">王宁</a><br/>
 * email: <a href="mailto:childe.wangning@gmail.com">childe.wangning@gmail.com</a>
 * @date  2012-3-12
 */
public final class Sets {

	private Sets() {
	}

	/**
	 * 创建一个可变的，空的 {@code HashSet} 对象.
	 * 
	 * @return 一个可变的，空的 {@code HashSet} 对象
	 */
	public static <E> HashSet<E> newHashSet() {
		return new HashSet<E>();
	}

	/**
	 * 创建一个可变的，空的 {@code TreeSet} 对象.
	 * 
	 * @return 一个可变的，空的 {@code TreeSet} 对象
	 */
	public static <E> TreeSet<E> newTreeSet() {
		return new TreeSet<E>();
	}

	/**
	 * 创建一个可变的，空的 {@code LinkedHashSet} 对象.
	 * 
	 * @return 一个可变的，空的 {@code LinkedHashSet} 对象
	 */
	public static <E> LinkedHashSet<E> newLinkedHashSet() {
		return new LinkedHashSet<E>();
	}

	/**
	 * 根据 {@code Collection} 参数创建一个可变的 {@code HashSet} 对象.
	 */
	public static <E> HashSet<E> newHashSet(Collection<? extends E> c) {
		return new HashSet<E>(c);
	}

	/**
	 * 根据 {@code Collection} 参数创建一个可变的 {@code TreeSet} 对象.
	 */
	public static <E> TreeSet<E> newTreeSet(Collection<? extends E> c) {
		return new TreeSet<E>(c);
	}

	/**
	 * 根据指定比较器 {@code Comparator} 创建一个可变的 {@code TreeSet} 对象.
	 */
	public static <E> TreeSet<E> newTreeSet(Comparator<? super E> comparator) {
		return new TreeSet<E>(comparator);
	}

	/**
	 * 根据 {@code Collection} 参数创建一个可变的 {@code LinkedHashSet} 对象.
	 */
	public static <E> LinkedHashSet<E> newLinkedHashSet(
			Collection<? extends E> c) {
		return new LinkedHashSet<E>(c);
	}

}
